package n3259;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static int cost[][]=new int[501][501];
	static int INF=Integer.MAX_VALUE;
	
	static int dist[]=new int[501];
	
	static int N;
	static boolean solve()
	{
		for(int i=0;i<=N;i++)dist[i]=0;
		
		for(int k=0;k<N-1;k++)
		{
			boolean relax=false;
			for(int i=1;i<=N;i++)
				for(int j=1;j<=N;j++)
				{
					if(i!=j&&cost[i][j]!=INF&&dist[j]>dist[i]+cost[i][j])
					{
						dist[j]=dist[i]+cost[i][j];
						relax=true;
					}
				}
			if(relax==false)return false;
		}
		
		for(int i=1;i<=N;i++)
			for(int j=1;j<=N;j++)
			{
				if(i!=j&&cost[i][j]!=INF&&dist[j]>dist[i]+cost[i][j])
				{
					return true;
				}
			}
		
		return false;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		int F=Integer.parseInt(bf.readLine());
		for(int i=0;i<F;i++)
		{
			StringTokenizer st=new StringTokenizer(bf.readLine());
			N=Integer.parseInt(st.nextToken());
			int M=Integer.parseInt(st.nextToken());
			int W=Integer.parseInt(st.nextToken());
			for(int j=1;j<=N;j++)
				for(int k=1;k<=N;k++)
					cost[j][k]=INF;
			for(int j=0;j<M;j++)
			{
				st=new StringTokenizer(bf.readLine());
				int a=Integer.parseInt(st.nextToken());
				int b=Integer.parseInt(st.nextToken());
				int t=Integer.parseInt(st.nextToken());
				if(cost[a][b]>t)cost[a][b]=t;
				if(cost[b][a]>t)cost[b][a]=t;
			}
			for(int j=0;j<W;j++)
			{
				st=new StringTokenizer(bf.readLine());
				int a=Integer.parseInt(st.nextToken());
				int b=Integer.parseInt(st.nextToken());
				int t=Integer.parseInt(st.nextToken());
				cost[a][b]=-t;
			}
			if(solve()) {
				System.out.println("YES");
			}else {
				System.out.println("NO");
			}
		}
	}

}
